package com.itbaizhan.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
/*Serializable 实现序列化接口  因为把项目拆分了几个子项目，
* 在子项目之间要传输对象的数据流，网络之间是二进制传输，所以要序列化，序列化才可以二进制传输*/
//要传输的对象必须序列化
public class Orders implements Serializable{
    //订单id
    private Long id;
    //用户id
    private Long userid;
    //订单总价格
    private Double price;
    //收贷人手机号
    private String mobile;
    //收货人地址
    private String address;
    //支付类型   1:微信 2:支付宝
    private Integer pay_method;
}
/*为什么需要序列化
网络传输的数据必须是二进制数据，但调用方请求的出入参数都是对象。
总结：
序列化就是将对象转换成二进制数据的过程，而反序列就是反过来将二进制转换为对象的过程。

流程：
不妨借用个例子帮助你理解，比如发快递，我们要发一个需要自行组装的物件。
发件人发之前，会把物件拆开装箱，这就好比序列化;这时候快递员来了，
不能磕碰呀，那就要打包，这就好比将序列化后的数据进行编码，封装成一个固定
格式的协议;过了两天，收件人收到包裹了，就会拆箱将物件拼接好，
这就好比是协议解码和反序列化。*/

/*报错没有序列化
java.lang.RuntimeException: Serialized class com.itbaizhan.pojo.Orders must implement java.io.Serializable
com.alibaba.dubbo.remoting.RemotingException: Failed to send response: Response [id=2, version=2.0.0, status=20, event=false, error=null, result=RpcResult [result=CommonResult(code=200, message=success, data=Orders(id=1, userid=2, price=22.5, mobile=123222222, address=广东, pay_method=1)), exception=null]], cause: java.lang.RuntimeException: Serialized class com.itbaizhan.pojo.Orders must implement java.io.Serializable*/